<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>MiXiM: ChannelInfo Class Reference</title>

<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
  $(document).ready(initResizable);
</script>


</head>
<body>
<div id="top"><!-- do not remove this div! -->


<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  
  
  <td style="padding-left: 0.5em;">
   <div id="projectname">MiXiM
   &#160;<span id="projectnumber">2.3</span>
   </div>
   
  </td>
  
  
  
 </tr>
 </tbody>
</table>
</div>

<!-- Generated by Doxygen 1.7.5.1 -->
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
      <li><a href="modules.html"><span>Modules</span></a></li>
      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
      <li><a href="files.html"><span>Files</span></a></li>
      <li><a href="dirs.html"><span>Directories</span></a></li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
      <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
      <li><a href="inherits.html"><span>Class&#160;Hierarchy</span></a></li>
      <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
    </ul>
  </div>
</div>
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
  initNavTree('a00043.html','');
</script>
<div id="doc-content">
<div class="header">
  <div class="summary">
<a href="#nested-classes">Classes</a> &#124;
<a href="#pub-types">Public Types</a> &#124;
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#pub-static-attribs">Static Public Attributes</a> &#124;
<a href="#pro-types">Protected Types</a> &#124;
<a href="#pro-methods">Protected Member Functions</a> &#124;
<a href="#pro-static-methods">Static Protected Member Functions</a> &#124;
<a href="#pro-attribs">Protected Attributes</a> &#124;
<a href="#pro-static-attribs">Static Protected Attributes</a>  </div>
  <div class="headertitle">
<div class="title">ChannelInfo Class Reference<div class="ingroups"><a class="el" href="a00510.html">phyLayer - physical layer modules</a></div></div>  </div>
</div>
<div class="contents">
<!-- doxytag: class="ChannelInfo" -->
<p>This class is used by the <a class="el" href="a00029.html" title="The BasePhyLayer represents the physical layer of a nic.">BasePhyLayer</a> to keep track of the AirFrames on the channel.  
 <a href="a00043.html#details">More...</a></p>

<p><code>#include &lt;<a class="el" href="a00287_source.html">ChannelInfo.h</a>&gt;</code></p>
<div class="dynheader">
Collaboration diagram for ChannelInfo:</div>
<div class="dyncontent">
<div class="center"><img src="a00630.png" border="0" usemap="#ChannelInfo_coll__map" alt="Collaboration graph"/></div>
<center><span class="legend">[<a target="top" href="graph_legend.html">legend</a>]</span></center></div>

<p><a href="a00631.html">List of all members.</a></p>
<table class="memberdecls">
<tr><td colspan="2"><h2><a name="nested-classes"></a>
Classes</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00007.html">airframe_filter_fctr</a></td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Functor which can be used as to filter for specific air frames.  <a href="a00007.html#details">More...</a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00024.html">BaseIntersectionIterator</a></td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Iterator for every intersection of a specific interval in a AirFrameMatrix.  <a href="a00024.html#details">More...</a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00042.html">c_min_start_time_fctr</a></td></tr>
<tr><td colspan="2"><h2><a name="pub-types"></a>
Public Types</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2703dfa7eecb2eca768a70ad9210406a"></a><!-- doxytag: member="ChannelInfo::airframe_t" ref="a2703dfa7eecb2eca768a70ad9210406a" args="" -->
typedef MiximAirFrame&#160;</td><td class="memItemRight" valign="bottom"><b>airframe_t</b></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">typedef airframe_t *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#aa93cf512eb51209e31b2d4903faca31d">airframe_ptr_t</a></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">typedef std::list&lt; <a class="el" href="a00043.html#aa93cf512eb51209e31b2d4903faca31d">airframe_ptr_t</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#a220306dd8d5282778f27be702d193431">AirFrameVector</a></td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Type for a container of AirFrames.  <a href="#a220306dd8d5282778f27be702d193431"></a><br/></td></tr>
<tr><td colspan="2"><h2><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#a6d92d233abde2703171773354c8689cd">addAirFrame</a> (<a class="el" href="a00043.html#aa93cf512eb51209e31b2d4903faca31d">airframe_ptr_t</a> a, simtime_t_cref startTime)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Tells the <a class="el" href="a00043.html" title="This class is used by the BasePhyLayer to keep track of the AirFrames on the channel.">ChannelInfo</a> that an AirFrame has started.  <a href="#a6d92d233abde2703171773354c8689cd"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">simtime_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#ac033379c710f5d4c66168032a92f0c1e">removeAirFrame</a> (<a class="el" href="a00043.html#aa93cf512eb51209e31b2d4903faca31d">airframe_ptr_t</a> a, simtime_t_cref returnTimeIfEmpty=<a class="el" href="a00043.html#a6e51dfe3982d95dace93761852a0ac07">invalidSimTime</a>)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Tells the <a class="el" href="a00043.html" title="This class is used by the BasePhyLayer to keep track of the AirFrames on the channel.">ChannelInfo</a> that an AirFrame is over.  <a href="#ac033379c710f5d4c66168032a92f0c1e"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#acb7f1f51f0f75b15fd29379e87128b27">getAirFrames</a> (simtime_t_cref from, simtime_t_cref to, <a class="el" href="a00043.html#a220306dd8d5282778f27be702d193431">AirFrameVector</a> &amp;out, <a class="el" href="a00007.html">airframe_filter_fctr</a> *const fctrFilter=NULL) const </td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Fills the passed AirFrameVector reference with the AirFrames which intersect with the given time interval.  <a href="#acb7f1f51f0f75b15fd29379e87128b27"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a69386cf7e037a163e298c0fd70bd7dea"></a><!-- doxytag: member="ChannelInfo::getEarliestInfoPoint" ref="a69386cf7e037a163e298c0fd70bd7dea" args="(simtime_t_cref returnTimeIfEmpty=invalidSimTime) const " -->
simtime_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#a69386cf7e037a163e298c0fd70bd7dea">getEarliestInfoPoint</a> (simtime_t_cref returnTimeIfEmpty=<a class="el" href="a00043.html#a6e51dfe3982d95dace93761852a0ac07">invalidSimTime</a>) const </td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the current time-point from that information concerning AirFrames is needed to be stored. <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#abab4a17344f3b254693ed34309c6466f">startRecording</a> (simtime_t_cref start)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Tells <a class="el" href="a00043.html" title="This class is used by the BasePhyLayer to keep track of the AirFrames on the channel.">ChannelInfo</a> to keep from now on all channel information until the passed time in history.  <a href="#abab4a17344f3b254693ed34309c6466f"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#a884277584d1abf73eaca5df0c61e08c9">stopRecording</a> ()</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Tells <a class="el" href="a00043.html" title="This class is used by the BasePhyLayer to keep track of the AirFrames on the channel.">ChannelInfo</a> to stop recording Information from now on.  <a href="#a884277584d1abf73eaca5df0c61e08c9"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#a5b1b8d56aa2fa64b5d79c0cf5c3167a9">isRecording</a> () const </td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns true if <a class="el" href="a00043.html" title="This class is used by the BasePhyLayer to keep track of the AirFrames on the channel.">ChannelInfo</a> is currently recording.  <a href="#a5b1b8d56aa2fa64b5d79c0cf5c3167a9"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5af012c57b6bb9930b1634138ab65bf8"></a><!-- doxytag: member="ChannelInfo::isChannelEmpty" ref="a5af012c57b6bb9930b1634138ab65bf8" args="() const " -->
bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#a5af012c57b6bb9930b1634138ab65bf8">isChannelEmpty</a> () const </td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns true if there are currently no active or inactive AirFrames on the channel. <br/></td></tr>
<tr><td colspan="2"><h2><a name="pub-static-attribs"></a>
Static Public Attributes</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6e51dfe3982d95dace93761852a0ac07"></a><!-- doxytag: member="ChannelInfo::invalidSimTime" ref="a6e51dfe3982d95dace93761852a0ac07" args="" -->
static const_simtime_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#a6e51dfe3982d95dace93761852a0ac07">invalidSimTime</a></td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Invalid simulation time point, will be used for return value of emptiness. <br/></td></tr>
<tr><td colspan="2"><h2><a name="pro-types"></a>
Protected Types</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">typedef std::map&lt; simtime_t, <br class="typebreak"/>
std::multimap&lt; simtime_t, <br class="typebreak"/>
<a class="el" href="a00043.html#aa93cf512eb51209e31b2d4903faca31d">airframe_ptr_t</a> &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#aba8c8f81b5fad9216a08d86de4acb070">AirFrameMatrix</a></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a684323fb3bd48d29674f5b14d7ce2f02"></a><!-- doxytag: member="ChannelInfo::const_iterator" ref="a684323fb3bd48d29674f5b14d7ce2f02" args="" -->
typedef <br class="typebreak"/>
<a class="el" href="a00024.html">BaseIntersectionIterator</a><br class="typebreak"/>
&lt; const <a class="el" href="a00043.html#aba8c8f81b5fad9216a08d86de4acb070">AirFrameMatrix</a>, <br class="typebreak"/>
AirFrameMatrix::const_iterator, <br class="typebreak"/>
AirFrameMatrix::mapped_type::const_iterator &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#a684323fb3bd48d29674f5b14d7ce2f02">const_iterator</a></td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Type for a const-iterator over an AirFrame interval matrix. <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afef8a1ed99d3d6ea005c5cc358dbbbbc"></a><!-- doxytag: member="ChannelInfo::iterator" ref="afef8a1ed99d3d6ea005c5cc358dbbbbc" args="" -->
typedef <br class="typebreak"/>
<a class="el" href="a00024.html">BaseIntersectionIterator</a><br class="typebreak"/>
&lt; <a class="el" href="a00043.html#aba8c8f81b5fad9216a08d86de4acb070">AirFrameMatrix</a>, <br class="typebreak"/>
AirFrameMatrix::iterator, <br class="typebreak"/>
AirFrameMatrix::mapped_type::iterator &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#afef8a1ed99d3d6ea005c5cc358dbbbbc">iterator</a></td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Type for a iterator over an AirFrame interval matrix. <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a03476c3a3c992f5e8bb099312e601c6a"></a><!-- doxytag: member="ChannelInfo::AirFrameStartMap" ref="a03476c3a3c992f5e8bb099312e601c6a" args="" -->
typedef std::map&lt; long, simtime_t &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#a03476c3a3c992f5e8bb099312e601c6a">AirFrameStartMap</a></td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Type for a map of AirFrame pointers to their start time. <br/></td></tr>
<tr><td colspan="2"><h2><a name="pro-methods"></a>
Protected Member Functions</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00043.html#a684323fb3bd48d29674f5b14d7ce2f02">const_iterator</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#aa372e681d453fa1725e81793cdfb4182">end</a> () const </td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00043.html#afef8a1ed99d3d6ea005c5cc358dbbbbc">iterator</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#a8afa15fedf769249c517b832eb577ac2">end</a> ()</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#a97025affc9a97382fc4b767fe698a170">erase</a> (const <a class="el" href="a00043.html#afef8a1ed99d3d6ea005c5cc358dbbbbc">iterator</a> &amp;__position)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Erases an element from a AirFrameMatrix.  <a href="#a97025affc9a97382fc4b767fe698a170"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4ec93f0a935723a0183de82969ff0d6e"></a><!-- doxytag: member="ChannelInfo::assertNoIntersections" ref="a4ec93f0a935723a0183de82969ff0d6e" args="() const " -->
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#a4ec93f0a935723a0183de82969ff0d6e">assertNoIntersections</a> () const </td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Asserts that every inactive AirFrame is still intersecting with at least one active airframe or with the current record start time. <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#a93b197f70e37825ac3fdc760960144f5">addToInactives</a> (<a class="el" href="a00043.html#aa93cf512eb51209e31b2d4903faca31d">airframe_ptr_t</a> a, simtime_t_cref startTime, simtime_t_cref endTime)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Moves a previously active AirFrame to the inactive AirFrames.  <a href="#a93b197f70e37825ac3fdc760960144f5"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a93480cb69cb9c0367f30e6ccba84181e"></a><!-- doxytag: member="ChannelInfo::findEarliestInfoPoint" ref="a93480cb69cb9c0367f30e6ccba84181e" args="(simtime_t_cref returnTimeIfEmpty=invalidSimTime) const " -->
simtime_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#a93480cb69cb9c0367f30e6ccba84181e">findEarliestInfoPoint</a> (simtime_t_cref returnTimeIfEmpty=<a class="el" href="a00043.html#a6e51dfe3982d95dace93761852a0ac07">invalidSimTime</a>) const </td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the start time of the odlest AirFrame on the channel. <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#a1ffb197c5bf86824cd04313da5e9e4ed">checkAndCleanInterval</a> (simtime_t_cref startTime, simtime_t_cref endTime)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks if any information inside the passed interval can be discarded.  <a href="#a1ffb197c5bf86824cd04313da5e9e4ed"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#ab4da0befdce7f2b27ae4a61d66ec2167">canDiscardInterval</a> (simtime_t_cref startTime, simtime_t_cref endTime)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns true if all information inside the passed interval can be deleted.  <a href="#ab4da0befdce7f2b27ae4a61d66ec2167"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#a3a3f57cc0461d0cb7b938feb58dc3947">checkAndCleanFrom</a> (simtime_t_cref start)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks if any information up from the passed start time can be discarded.  <a href="#a3a3f57cc0461d0cb7b938feb58dc3947"></a><br/></td></tr>
<tr><td colspan="2"><h2><a name="pro-static-methods"></a>
Static Protected Member Functions</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#ab9b1803c1c37bc3d20924ea20fc8da59">getIntersections</a> (const <a class="el" href="a00043.html#aba8c8f81b5fad9216a08d86de4acb070">AirFrameMatrix</a> &amp;airFrames, simtime_t_cref from, simtime_t_cref to, <a class="el" href="a00043.html#a220306dd8d5282778f27be702d193431">AirFrameVector</a> &amp;outVector, <a class="el" href="a00007.html">airframe_filter_fctr</a> *const fctrFilter=NULL)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns every AirFrame of an AirFrameMatrix which intersect with a given interval.  <a href="#ab9b1803c1c37bc3d20924ea20fc8da59"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac1f58994b3a3002151389722dc311c48"></a><!-- doxytag: member="ChannelInfo::isIntersecting" ref="ac1f58994b3a3002151389722dc311c48" args="(const AirFrameMatrix &amp;airFrames, simtime_t_cref from, simtime_t_cref to)" -->
static bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#ac1f58994b3a3002151389722dc311c48">isIntersecting</a> (const <a class="el" href="a00043.html#aba8c8f81b5fad9216a08d86de4acb070">AirFrameMatrix</a> &amp;airFrames, simtime_t_cref from, simtime_t_cref to)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns true if there is at least one AirFrame in the passed AirFrameMatrix which intersect with the given interval. <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1c021b6db89a2f805004e221dd84b3f1"></a><!-- doxytag: member="ChannelInfo::deleteAirFrame" ref="a1c021b6db89a2f805004e221dd84b3f1" args="(AirFrameMatrix &amp;airFrames, airframe_ptr_t a, simtime_t_cref startTime, simtime_t_cref endTime)" -->
static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#a1c021b6db89a2f805004e221dd84b3f1">deleteAirFrame</a> (<a class="el" href="a00043.html#aba8c8f81b5fad9216a08d86de4acb070">AirFrameMatrix</a> &amp;airFrames, <a class="el" href="a00043.html#aa93cf512eb51209e31b2d4903faca31d">airframe_ptr_t</a> a, simtime_t_cref startTime, simtime_t_cref endTime)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Deletes an AirFrame from an AirFrameMatrix. <br/></td></tr>
<tr><td colspan="2"><h2><a name="pro-attribs"></a>
Protected Attributes</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00043.html#aba8c8f81b5fad9216a08d86de4acb070">AirFrameMatrix</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#a2db96b70bb8678e3e4959985a7ef27a5">activeAirFrames</a></td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Stores the currently active AirFrames.  <a href="#a2db96b70bb8678e3e4959985a7ef27a5"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00043.html#aba8c8f81b5fad9216a08d86de4acb070">AirFrameMatrix</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#ac674b4797484960e332e260af4825c04">inactiveAirFrames</a></td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Stores inactive AirFrames.  <a href="#ac674b4797484960e332e260af4825c04"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9c7678b4205557914b26e58edcdf44c2"></a><!-- doxytag: member="ChannelInfo::airFrameStarts" ref="a9c7678b4205557914b26e58edcdf44c2" args="" -->
<a class="el" href="a00043.html#a03476c3a3c992f5e8bb099312e601c6a">AirFrameStartMap</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#a9c7678b4205557914b26e58edcdf44c2">airFrameStarts</a></td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Stores the start time of every AirFrame. <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a647dc636e9aa2f8a70ac99b604336cb2"></a><!-- doxytag: member="ChannelInfo::recordStartTime" ref="a647dc636e9aa2f8a70ac99b604336cb2" args="" -->
simtime_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#a647dc636e9aa2f8a70ac99b604336cb2">recordStartTime</a></td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Stores a point in history up to which we need to keep all channel information stored (value should be less than 0.0). <br/></td></tr>
<tr><td colspan="2"><h2><a name="pro-static-attribs"></a>
Static Protected Attributes</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a37ac84f95c3faeb3e2606a4a01dbf36e"></a><!-- doxytag: member="ChannelInfo::cConstItEnd" ref="a37ac84f95c3faeb3e2606a4a01dbf36e" args="" -->
static const <a class="el" href="a00043.html#a684323fb3bd48d29674f5b14d7ce2f02">const_iterator</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#a37ac84f95c3faeb3e2606a4a01dbf36e">cConstItEnd</a></td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">The end iterator for the matrix. <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4ad62d494f91f38b3fe52963cc96fb14"></a><!-- doxytag: member="ChannelInfo::cItEnd" ref="a4ad62d494f91f38b3fe52963cc96fb14" args="" -->
static const <a class="el" href="a00043.html#afef8a1ed99d3d6ea005c5cc358dbbbbc">iterator</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html#a4ad62d494f91f38b3fe52963cc96fb14">cItEnd</a></td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">The end iterator for the matrix. <br/></td></tr>
</table>
<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
<div class="textblock"><p>This class is used by the <a class="el" href="a00029.html" title="The BasePhyLayer represents the physical layer of a nic.">BasePhyLayer</a> to keep track of the AirFrames on the channel. </p>
<p><a class="el" href="a00043.html" title="This class is used by the BasePhyLayer to keep track of the AirFrames on the channel.">ChannelInfo</a> is able to return every AirFrame which intersects with a specified interval. This is mainly used to get the noise for a received signal.</p>
<p><a class="el" href="a00043.html" title="This class is used by the BasePhyLayer to keep track of the AirFrames on the channel.">ChannelInfo</a> is a passive class meaning the user has to tell it when a new AirFrame starts and an existing ends.</p>
<p>Once an AirFrame has been added to the <a class="el" href="a00043.html" title="This class is used by the BasePhyLayer to keep track of the AirFrames on the channel.">ChannelInfo</a> the <a class="el" href="a00043.html" title="This class is used by the BasePhyLayer to keep track of the AirFrames on the channel.">ChannelInfo</a> holds the ownership of this AirFrame even if the AirFrame is removed again from the <a class="el" href="a00043.html" title="This class is used by the BasePhyLayer to keep track of the AirFrames on the channel.">ChannelInfo</a>. This is necessary because the <a class="el" href="a00043.html" title="This class is used by the BasePhyLayer to keep track of the AirFrames on the channel.">ChannelInfo</a> has to be able to store also the AirFrames which are over but still intersect with an currently running AirFrame.</p>
<p>Note: <a class="el" href="a00043.html" title="This class is used by the BasePhyLayer to keep track of the AirFrames on the channel.">ChannelInfo</a> assumes that the AirFrames are added and removed chronologically. This means every time you add an AirFrame with a specific start time <a class="el" href="a00043.html" title="This class is used by the BasePhyLayer to keep track of the AirFrames on the channel.">ChannelInfo</a> assumes that start time as the current time and assumes that every following action happens after that moment. The same goes for "removeAirFrame". When removing an AirFrames, <a class="el" href="a00043.html" title="This class is used by the BasePhyLayer to keep track of the AirFrames on the channel.">ChannelInfo</a> assumes the start time plus the duration of the AirFrame as the current time. This also affects "getAirFrames" in the way that you may only ask for intervals which lie before the "current time" of <a class="el" href="a00043.html" title="This class is used by the BasePhyLayer to keep track of the AirFrames on the channel.">ChannelInfo</a>.</p>
<p>A state-machine-diagram for Radio, <a class="el" href="a00182.html" title="This special AnalogueModel provides filtering of a Signal according to the actual RadioStates the Rad...">RadioStateAnalogueModel</a> and <a class="el" href="a00043.html" title="This class is used by the BasePhyLayer to keep track of the AirFrames on the channel.">ChannelInfo</a> showing how they work together under control of <a class="el" href="a00029.html" title="The BasePhyLayer represents the physical layer of a nic.">BasePhyLayer</a> as well as some documentation on how <a class="el" href="a00182.html" title="This special AnalogueModel provides filtering of a Signal according to the actual RadioStates the Rad...">RadioStateAnalogueModel</a> works is available in <a class="el" href="a00510.html">phyLayer - physical layer modules</a>. </p>
</div><hr/><h2>Member Typedef Documentation</h2>
<a class="anchor" id="aa93cf512eb51209e31b2d4903faca31d"></a><!-- doxytag: member="ChannelInfo::airframe_ptr_t" ref="aa93cf512eb51209e31b2d4903faca31d" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef airframe_t* <a class="el" href="a00043.html#aa93cf512eb51209e31b2d4903faca31d">ChannelInfo::airframe_ptr_t</a></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>The stored air frame pointer type </p>

</div>
</div>
<a class="anchor" id="aba8c8f81b5fad9216a08d86de4acb070"></a><!-- doxytag: member="ChannelInfo::AirFrameMatrix" ref="aba8c8f81b5fad9216a08d86de4acb070" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef std::map&lt;simtime_t, std::multimap&lt;simtime_t, <a class="el" href="a00043.html#aa93cf512eb51209e31b2d4903faca31d">airframe_ptr_t</a>&gt; &gt; <a class="el" href="a00043.html#aba8c8f81b5fad9216a08d86de4acb070">ChannelInfo::AirFrameMatrix</a><code> [protected]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>The AirFrames are stored in a Matrix with start- and end time as dimensions. </p>

</div>
</div>
<a class="anchor" id="a220306dd8d5282778f27be702d193431"></a><!-- doxytag: member="ChannelInfo::AirFrameVector" ref="a220306dd8d5282778f27be702d193431" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef std::list&lt;<a class="el" href="a00043.html#aa93cf512eb51209e31b2d4903faca31d">airframe_ptr_t</a>&gt; <a class="el" href="a00043.html#a220306dd8d5282778f27be702d193431">ChannelInfo::AirFrameVector</a></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Type for a container of AirFrames. </p>
<p>Used as out type for "getAirFrames" method. </p>

</div>
</div>
<hr/><h2>Member Function Documentation</h2>
<a class="anchor" id="a6d92d233abde2703171773354c8689cd"></a><!-- doxytag: member="ChannelInfo::addAirFrame" ref="a6d92d233abde2703171773354c8689cd" args="(airframe_ptr_t a, simtime_t_cref startTime)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void ChannelInfo::addAirFrame </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="a00043.html#aa93cf512eb51209e31b2d4903faca31d">airframe_ptr_t</a>&#160;</td>
          <td class="paramname"><em>a</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">simtime_t_cref&#160;</td>
          <td class="paramname"><em>startTime</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Tells the <a class="el" href="a00043.html" title="This class is used by the BasePhyLayer to keep track of the AirFrames on the channel.">ChannelInfo</a> that an AirFrame has started. </p>
<p>From this point <a class="el" href="a00043.html" title="This class is used by the BasePhyLayer to keep track of the AirFrames on the channel.">ChannelInfo</a> gets the ownership of the AirFrame.</p>
<p>parameter startTime holds the time the receiving of the AirFrame has started in seconds. </p>

<p>References <a class="el" href="a00043.html#a2db96b70bb8678e3e4959985a7ef27a5">activeAirFrames</a>, <a class="el" href="a00043.html#a9c7678b4205557914b26e58edcdf44c2">airFrameStarts</a>, and <a class="el" href="a00043.html#a5af012c57b6bb9930b1634138ab65bf8">isChannelEmpty()</a>.</p>

<p>Referenced by <a class="el" href="a00029.html#af21aac7c5a0c4bc282817232f3879611">BasePhyLayer::handleAirFrameStartReceive()</a>.</p>
<div class="fragment"><pre class="fragment">{
  assert(<a class="code" href="a00043.html#a9c7678b4205557914b26e58edcdf44c2" title="Stores the start time of every AirFrame.">airFrameStarts</a>.count(frame-&gt;getTreeId()) == 0);

  <span class="comment">//calculate endTime of AirFrame</span>
  simtime_t endTime = startTime + frame-&gt;getDuration();

  AirFrameMatrix::iterator pos = <a class="code" href="a00043.html#a2db96b70bb8678e3e4959985a7ef27a5" title="Stores the currently active AirFrames.">activeAirFrames</a>.lower_bound(endTime);
  <span class="keywordflow">if</span>(pos == <a class="code" href="a00043.html#a2db96b70bb8678e3e4959985a7ef27a5" title="Stores the currently active AirFrames.">activeAirFrames</a>.end() || (<a class="code" href="a00043.html#a2db96b70bb8678e3e4959985a7ef27a5" title="Stores the currently active AirFrames.">activeAirFrames</a>.key_comp()(endTime, pos-&gt;first))) {
      <span class="comment">// key does not exists</span>
    pos = <a class="code" href="a00043.html#a2db96b70bb8678e3e4959985a7ef27a5" title="Stores the currently active AirFrames.">activeAirFrames</a>.insert(pos, std::make_pair(endTime, AirFrameMatrix::mapped_type()));
  }
  pos-&gt;second.insert(std::make_pair(startTime, frame));

  <span class="comment">//add to start time map</span>
  <a class="code" href="a00043.html#a9c7678b4205557914b26e58edcdf44c2" title="Stores the start time of every AirFrame.">airFrameStarts</a>[frame-&gt;getTreeId()] = startTime;

  assert(!<a class="code" href="a00043.html#a5af012c57b6bb9930b1634138ab65bf8" title="Returns true if there are currently no active or inactive AirFrames on the channel.">isChannelEmpty</a>());
}
</pre></div>
</div>
</div>
<a class="anchor" id="a93b197f70e37825ac3fdc760960144f5"></a><!-- doxytag: member="ChannelInfo::addToInactives" ref="a93b197f70e37825ac3fdc760960144f5" args="(airframe_ptr_t a, simtime_t_cref startTime, simtime_t_cref endTime)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void ChannelInfo::addToInactives </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="a00043.html#aa93cf512eb51209e31b2d4903faca31d">airframe_ptr_t</a>&#160;</td>
          <td class="paramname"><em>a</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">simtime_t_cref&#160;</td>
          <td class="paramname"><em>startTime</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">simtime_t_cref&#160;</td>
          <td class="paramname"><em>endTime</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td><code> [protected]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Moves a previously active AirFrame to the inactive AirFrames. </p>
<p>This methods checks if there are some inactive AirFrames which can be deleted because the AirFrame to in-activate was the last one they intersected with. It also checks if the AirFrame to in-activate still intersect with at least one active AirFrame before it is moved to inactive AirFrames. </p>

<p>References <a class="el" href="a00043.html#a9c7678b4205557914b26e58edcdf44c2">airFrameStarts</a>, <a class="el" href="a00043.html#ab4da0befdce7f2b27ae4a61d66ec2167">canDiscardInterval()</a>, <a class="el" href="a00043.html#a1ffb197c5bf86824cd04313da5e9e4ed">checkAndCleanInterval()</a>, and <a class="el" href="a00043.html#ac674b4797484960e332e260af4825c04">inactiveAirFrames</a>.</p>

<p>Referenced by <a class="el" href="a00043.html#ac033379c710f5d4c66168032a92f0c1e">removeAirFrame()</a>.</p>
<div class="fragment"><pre class="fragment">{
  <span class="comment">// At first, check if some inactive AirFrames can be removed because the</span>
  <span class="comment">// AirFrame to in-activate was the last one they intersected with.</span>
  <a class="code" href="a00043.html#a1ffb197c5bf86824cd04313da5e9e4ed" title="Checks if any information inside the passed interval can be discarded.">checkAndCleanInterval</a>(startTime, endTime);

  <span class="keywordflow">if</span>(!<a class="code" href="a00043.html#ab4da0befdce7f2b27ae4a61d66ec2167" title="Returns true if all information inside the passed interval can be deleted.">canDiscardInterval</a>(startTime, endTime)) {
    AirFrameMatrix::iterator pos = <a class="code" href="a00043.html#ac674b4797484960e332e260af4825c04" title="Stores inactive AirFrames.">inactiveAirFrames</a>.lower_bound(endTime);
    <span class="keywordflow">if</span>(pos == <a class="code" href="a00043.html#ac674b4797484960e332e260af4825c04" title="Stores inactive AirFrames.">inactiveAirFrames</a>.end() || (<a class="code" href="a00043.html#ac674b4797484960e332e260af4825c04" title="Stores inactive AirFrames.">inactiveAirFrames</a>.key_comp()(endTime, pos-&gt;first))) {
        <span class="comment">// key does not exists</span>
      pos = <a class="code" href="a00043.html#ac674b4797484960e332e260af4825c04" title="Stores inactive AirFrames.">inactiveAirFrames</a>.insert(pos, std::make_pair(endTime, AirFrameMatrix::mapped_type()));
    }
    pos-&gt;second.insert(std::make_pair(startTime, frame));
  }
  <span class="keywordflow">else</span> {
    <a class="code" href="a00043.html#a9c7678b4205557914b26e58edcdf44c2" title="Stores the start time of every AirFrame.">airFrameStarts</a>.erase(frame-&gt;getTreeId());
    <span class="keyword">delete</span> frame;
  }
}
</pre></div>
</div>
</div>
<a class="anchor" id="ab4da0befdce7f2b27ae4a61d66ec2167"></a><!-- doxytag: member="ChannelInfo::canDiscardInterval" ref="ab4da0befdce7f2b27ae4a61d66ec2167" args="(simtime_t_cref startTime, simtime_t_cref endTime)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">bool ChannelInfo::canDiscardInterval </td>
          <td>(</td>
          <td class="paramtype">simtime_t_cref&#160;</td>
          <td class="paramname"><em>startTime</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">simtime_t_cref&#160;</td>
          <td class="paramname"><em>endTime</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td><code> [protected]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Returns true if all information inside the passed interval can be deleted. </p>
<p>For example this method is used to check if information for the duration of an AirFrame is needed anymore and if not the AirFrame is deleted.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">startTime</td><td>The start time of the interval (e.g. AirFrame start) </td></tr>
    <tr><td class="paramname">endTime</td><td>The end time of the interval (e.g. AirFrame end) </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>returns true if any information for the passed interval can be discarded. </dd></dl>

<p>References <a class="el" href="a00043.html#a2db96b70bb8678e3e4959985a7ef27a5">activeAirFrames</a>, <a class="el" href="a00043.html#a6e51dfe3982d95dace93761852a0ac07">invalidSimTime</a>, <a class="el" href="a00043.html#ac1f58994b3a3002151389722dc311c48">isIntersecting()</a>, and <a class="el" href="a00043.html#a647dc636e9aa2f8a70ac99b604336cb2">recordStartTime</a>.</p>

<p>Referenced by <a class="el" href="a00043.html#a93b197f70e37825ac3fdc760960144f5">addToInactives()</a>, and <a class="el" href="a00043.html#a1ffb197c5bf86824cd04313da5e9e4ed">checkAndCleanInterval()</a>.</p>
<div class="fragment"><pre class="fragment">{
  assert(<a class="code" href="a00043.html#a647dc636e9aa2f8a70ac99b604336cb2" title="Stores a point in history up to which we need to keep all channel information stored (value should be...">recordStartTime</a> &gt;= SIMTIME_ZERO || <a class="code" href="a00043.html#a647dc636e9aa2f8a70ac99b604336cb2" title="Stores a point in history up to which we need to keep all channel information stored (value should be...">recordStartTime</a> == <a class="code" href="a00043.html#a6e51dfe3982d95dace93761852a0ac07" title="Invalid simulation time point, will be used for return value of emptiness.">invalidSimTime</a>);

  <span class="comment">// only if it ends before the point in time we started recording or if</span>
  <span class="comment">// we aren&#39;t recording at all and it does not intersect with any active one</span>
  <span class="comment">// anymore this AirFrame can be deleted</span>
  <span class="keywordflow">return</span> (<a class="code" href="a00043.html#a647dc636e9aa2f8a70ac99b604336cb2" title="Stores a point in history up to which we need to keep all channel information stored (value should be...">recordStartTime</a> &gt; endTime || <a class="code" href="a00043.html#a647dc636e9aa2f8a70ac99b604336cb2" title="Stores a point in history up to which we need to keep all channel information stored (value should be...">recordStartTime</a> == <a class="code" href="a00043.html#a6e51dfe3982d95dace93761852a0ac07" title="Invalid simulation time point, will be used for return value of emptiness.">invalidSimTime</a>)
       &amp;&amp; !<a class="code" href="a00043.html#ac1f58994b3a3002151389722dc311c48" title="Returns true if there is at least one AirFrame in the passed AirFrameMatrix which intersect with the ...">isIntersecting</a>(<a class="code" href="a00043.html#a2db96b70bb8678e3e4959985a7ef27a5" title="Stores the currently active AirFrames.">activeAirFrames</a>, startTime, endTime);
}
</pre></div>
</div>
</div>
<a class="anchor" id="a3a3f57cc0461d0cb7b938feb58dc3947"></a><!-- doxytag: member="ChannelInfo::checkAndCleanFrom" ref="a3a3f57cc0461d0cb7b938feb58dc3947" args="(simtime_t_cref start)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void ChannelInfo::checkAndCleanFrom </td>
          <td>(</td>
          <td class="paramtype">simtime_t_cref&#160;</td>
          <td class="paramname"><em>start</em></td><td>)</td>
          <td><code> [inline, protected]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Checks if any information up from the passed start time can be discarded. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">startTime</td><td>The start of the interval to check </td></tr>
  </table>
  </dd>
</dl>

<p>References <a class="el" href="a00043.html#a1ffb197c5bf86824cd04313da5e9e4ed">checkAndCleanInterval()</a>, and <a class="el" href="a00043.html#ac674b4797484960e332e260af4825c04">inactiveAirFrames</a>.</p>

<p>Referenced by <a class="el" href="a00043.html#a884277584d1abf73eaca5df0c61e08c9">stopRecording()</a>.</p>
<div class="fragment"><pre class="fragment">                                               {
    <span class="comment">//nothing to do</span>
    <span class="keywordflow">if</span>(<a class="code" href="a00043.html#ac674b4797484960e332e260af4825c04" title="Stores inactive AirFrames.">inactiveAirFrames</a>.empty())
      <span class="keywordflow">return</span>;

    <span class="comment">//take last ended inactive airframe as end of interval</span>
    <a class="code" href="a00043.html#a1ffb197c5bf86824cd04313da5e9e4ed" title="Checks if any information inside the passed interval can be discarded.">checkAndCleanInterval</a>(start, <a class="code" href="a00043.html#ac674b4797484960e332e260af4825c04" title="Stores inactive AirFrames.">inactiveAirFrames</a>.rbegin()-&gt;first);
  }
</pre></div>
</div>
</div>
<a class="anchor" id="a1ffb197c5bf86824cd04313da5e9e4ed"></a><!-- doxytag: member="ChannelInfo::checkAndCleanInterval" ref="a1ffb197c5bf86824cd04313da5e9e4ed" args="(simtime_t_cref startTime, simtime_t_cref endTime)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void ChannelInfo::checkAndCleanInterval </td>
          <td>(</td>
          <td class="paramtype">simtime_t_cref&#160;</td>
          <td class="paramname"><em>startTime</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">simtime_t_cref&#160;</td>
          <td class="paramname"><em>endTime</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td><code> [protected]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Checks if any information inside the passed interval can be discarded. </p>
<p>This method should be called every time the information for a certain interval changes (AirFrame is removed or record time changed).</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">startTime</td><td>The start of the interval to check </td></tr>
    <tr><td class="paramname">endTime</td><td>The end of the interval to check </td></tr>
  </table>
  </dd>
</dl>

<p>References <a class="el" href="a00043.html#a9c7678b4205557914b26e58edcdf44c2">airFrameStarts</a>, <a class="el" href="a00043.html#ab4da0befdce7f2b27ae4a61d66ec2167">canDiscardInterval()</a>, <a class="el" href="a00043.html#aa372e681d453fa1725e81793cdfb4182">end()</a>, <a class="el" href="a00043.html#a97025affc9a97382fc4b767fe698a170">erase()</a>, and <a class="el" href="a00043.html#ac674b4797484960e332e260af4825c04">inactiveAirFrames</a>.</p>

<p>Referenced by <a class="el" href="a00043.html#a93b197f70e37825ac3fdc760960144f5">addToInactives()</a>, <a class="el" href="a00043.html#a3a3f57cc0461d0cb7b938feb58dc3947">checkAndCleanFrom()</a>, and <a class="el" href="a00043.html#abab4a17344f3b254693ed34309c6466f">startRecording()</a>.</p>
<div class="fragment"><pre class="fragment">{
  <span class="comment">// get through inactive AirFrame which intersected with the passed interval</span>
  <a class="code" href="a00043.html#afef8a1ed99d3d6ea005c5cc358dbbbbc" title="Type for a iterator over an AirFrame interval matrix.">iterator</a> itInactiveFrames(&amp;<a class="code" href="a00043.html#ac674b4797484960e332e260af4825c04" title="Stores inactive AirFrames.">inactiveAirFrames</a>, startTime, endTime);
  <a class="code" href="a00043.html#afef8a1ed99d3d6ea005c5cc358dbbbbc" title="Type for a iterator over an AirFrame interval matrix.">iterator</a> itEnd = <a class="code" href="a00043.html#aa372e681d453fa1725e81793cdfb4182">end</a>();
  <span class="keywordflow">for</span> (; itInactiveFrames != itEnd;) {
    <a class="code" href="a00043.html#aa93cf512eb51209e31b2d4903faca31d">airframe_ptr_t</a> pInactiveFrame = itInactiveFrames-&gt;second;
    simtime_t      currentEnd     = itInactiveFrames-&gt;first + pInactiveFrame-&gt;getDuration();

    <span class="keywordflow">if</span>(<a class="code" href="a00043.html#ab4da0befdce7f2b27ae4a61d66ec2167" title="Returns true if all information inside the passed interval can be deleted.">canDiscardInterval</a>(itInactiveFrames-&gt;first, currentEnd)) {
      <a class="code" href="a00043.html#a97025affc9a97382fc4b767fe698a170" title="Erases an element from a AirFrameMatrix.">erase</a>(itInactiveFrames++);

      <a class="code" href="a00043.html#a9c7678b4205557914b26e58edcdf44c2" title="Stores the start time of every AirFrame.">airFrameStarts</a>.erase(pInactiveFrame-&gt;getTreeId());
      <span class="keyword">delete</span> pInactiveFrame;
      <span class="keywordflow">continue</span>;
    }
    ++itInactiveFrames;
  }
}
</pre></div>
</div>
</div>
<a class="anchor" id="aa372e681d453fa1725e81793cdfb4182"></a><!-- doxytag: member="ChannelInfo::end" ref="aa372e681d453fa1725e81793cdfb4182" args="() const " -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="a00043.html#a684323fb3bd48d29674f5b14d7ce2f02">const_iterator</a> ChannelInfo::end </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const<code> [inline, protected]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Returns a read-only (constant) iterator that points one past the last pair in the AirFrameMatrix. Iteration is done in ascending order according to the end, and start time. </p>

<p>References <a class="el" href="a00043.html#a37ac84f95c3faeb3e2606a4a01dbf36e">cConstItEnd</a>.</p>

<p>Referenced by <a class="el" href="a00043.html#a1ffb197c5bf86824cd04313da5e9e4ed">checkAndCleanInterval()</a>.</p>
<div class="fragment"><pre class="fragment">                             {
    <span class="keywordflow">return</span> <a class="code" href="a00043.html#a37ac84f95c3faeb3e2606a4a01dbf36e" title="The end iterator for the matrix.">cConstItEnd</a>;
  }
</pre></div>
</div>
</div>
<a class="anchor" id="a8afa15fedf769249c517b832eb577ac2"></a><!-- doxytag: member="ChannelInfo::end" ref="a8afa15fedf769249c517b832eb577ac2" args="()" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="a00043.html#afef8a1ed99d3d6ea005c5cc358dbbbbc">iterator</a> ChannelInfo::end </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td><code> [inline, protected]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Returns a read/write iterator that points one past the last pair in the AirFrameMatrix. Iteration is done in ascending order according to the end, and start time. </p>

<p>References <a class="el" href="a00043.html#a4ad62d494f91f38b3fe52963cc96fb14">cItEnd</a>.</p>
<div class="fragment"><pre class="fragment">                 {
    <span class="keywordflow">return</span> <a class="code" href="a00043.html#a4ad62d494f91f38b3fe52963cc96fb14" title="The end iterator for the matrix.">cItEnd</a>;
  }
</pre></div>
</div>
</div>
<a class="anchor" id="a97025affc9a97382fc4b767fe698a170"></a><!-- doxytag: member="ChannelInfo::erase" ref="a97025affc9a97382fc4b767fe698a170" args="(const iterator &amp;__position)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void ChannelInfo::erase </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="a00043.html#afef8a1ed99d3d6ea005c5cc358dbbbbc">iterator</a> &amp;&#160;</td>
          <td class="paramname"><em>__position</em></td><td>)</td>
          <td><code> [inline, protected]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Erases an element from a AirFrameMatrix. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">position</td><td>An iterator pointing to the element to be erased.</td></tr>
  </table>
  </dd>
</dl>
<p>This function erases an element, pointed to by the given iterator, from a AirFrameMatrix. Note that this function only erases the element, and that if the element is itself a pointer, the pointed-to memory is not touched in any way. Managing the pointer is the user's responsibility. </p>

<p>References <a class="el" href="a00024.html#a0546c8bfc867fbe321668ac876328d6d">ChannelInfo::BaseIntersectionIterator&lt; C, ItMatrix, ItSubMatrix &gt;::endIt</a>, <a class="el" href="a00024.html#a752c33584da635c8293c29c2116cdc42">ChannelInfo::BaseIntersectionIterator&lt; C, ItMatrix, ItSubMatrix &gt;::intervals</a>, and <a class="el" href="a00024.html#ab0d649bb86964e452843cfc9a78f09b5">ChannelInfo::BaseIntersectionIterator&lt; C, ItMatrix, ItSubMatrix &gt;::startIt</a>.</p>

<p>Referenced by <a class="el" href="a00043.html#a1ffb197c5bf86824cd04313da5e9e4ed">checkAndCleanInterval()</a>.</p>
<div class="fragment"><pre class="fragment">                                         {
    assert(__position.endIt   != __position.intervals-&gt;end());
    assert(__position.startIt != __position.startItEnd);

    <span class="comment">//erase AirFrame from list</span>
    __position.endIt-&gt;second.erase(__position.startIt);

    <span class="comment">//check if we deleted the only entry in the list</span>
    <span class="keywordflow">if</span>(__position.endIt-&gt;second.empty()) {
      __position.intervals-&gt;erase(__position.endIt); <span class="comment">//delete list from map</span>
    }
  }
</pre></div>
</div>
</div>
<a class="anchor" id="acb7f1f51f0f75b15fd29379e87128b27"></a><!-- doxytag: member="ChannelInfo::getAirFrames" ref="acb7f1f51f0f75b15fd29379e87128b27" args="(simtime_t_cref from, simtime_t_cref to, AirFrameVector &amp;out, airframe_filter_fctr *const fctrFilter=NULL) const " -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void ChannelInfo::getAirFrames </td>
          <td>(</td>
          <td class="paramtype">simtime_t_cref&#160;</td>
          <td class="paramname"><em>from</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">simtime_t_cref&#160;</td>
          <td class="paramname"><em>to</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="a00043.html#a220306dd8d5282778f27be702d193431">AirFrameVector</a> &amp;&#160;</td>
          <td class="paramname"><em>out</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="a00007.html">airframe_filter_fctr</a> *const&#160;</td>
          <td class="paramname"><em>fctrFilter</em> = <code>NULL</code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td> const<code> [inline]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Fills the passed AirFrameVector reference with the AirFrames which intersect with the given time interval. </p>
<p>Note: Completeness of the list of AirFrames for specific interval can only be assured if start and end point of the interval lies inside the duration of at least one currently active AirFrame. An AirFrame is called active if it has been added but not yet removed from <a class="el" href="a00043.html" title="This class is used by the BasePhyLayer to keep track of the AirFrames on the channel.">ChannelInfo</a>. </p>

<p>References <a class="el" href="a00043.html#a2db96b70bb8678e3e4959985a7ef27a5">activeAirFrames</a>, <a class="el" href="a00043.html#ab9b1803c1c37bc3d20924ea20fc8da59">getIntersections()</a>, and <a class="el" href="a00043.html#ac674b4797484960e332e260af4825c04">inactiveAirFrames</a>.</p>

<p>Referenced by <a class="el" href="a00029.html#af47d1c1771648303c64aa1da77cba2e4">BasePhyLayer::getChannelInfo()</a>, and <a class="el" href="a00029.html#a0fc69907490ed2752d2a888ef26348ff">BasePhyLayer::~BasePhyLayer()</a>.</p>
<div class="fragment"><pre class="fragment">  {
      <span class="comment">//check for intersecting inactive AirFrames</span>
      <a class="code" href="a00043.html#ab9b1803c1c37bc3d20924ea20fc8da59" title="Returns every AirFrame of an AirFrameMatrix which intersect with a given interval.">getIntersections</a>(<a class="code" href="a00043.html#ac674b4797484960e332e260af4825c04" title="Stores inactive AirFrames.">inactiveAirFrames</a>, from, to, out, fctrFilter);

      <span class="comment">//check for intersecting active AirFrames</span>
      <a class="code" href="a00043.html#ab9b1803c1c37bc3d20924ea20fc8da59" title="Returns every AirFrame of an AirFrameMatrix which intersect with a given interval.">getIntersections</a>(<a class="code" href="a00043.html#a2db96b70bb8678e3e4959985a7ef27a5" title="Stores the currently active AirFrames.">activeAirFrames</a>, from, to, out, fctrFilter);
  }
</pre></div>
</div>
</div>
<a class="anchor" id="ab9b1803c1c37bc3d20924ea20fc8da59"></a><!-- doxytag: member="ChannelInfo::getIntersections" ref="ab9b1803c1c37bc3d20924ea20fc8da59" args="(const AirFrameMatrix &amp;airFrames, simtime_t_cref from, simtime_t_cref to, AirFrameVector &amp;outVector, airframe_filter_fctr *const fctrFilter=NULL)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static void ChannelInfo::getIntersections </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="a00043.html#aba8c8f81b5fad9216a08d86de4acb070">AirFrameMatrix</a> &amp;&#160;</td>
          <td class="paramname"><em>airFrames</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">simtime_t_cref&#160;</td>
          <td class="paramname"><em>from</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">simtime_t_cref&#160;</td>
          <td class="paramname"><em>to</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="a00043.html#a220306dd8d5282778f27be702d193431">AirFrameVector</a> &amp;&#160;</td>
          <td class="paramname"><em>outVector</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="a00007.html">airframe_filter_fctr</a> *const&#160;</td>
          <td class="paramname"><em>fctrFilter</em> = <code>NULL</code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td><code> [inline, static, protected]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Returns every AirFrame of an AirFrameMatrix which intersect with a given interval. </p>
<p>The intersecting AirFrames are stored in the AirFrameVector reference passed as parameter. </p>

<p>References <a class="el" href="a00043.html#a37ac84f95c3faeb3e2606a4a01dbf36e">cConstItEnd</a>.</p>

<p>Referenced by <a class="el" href="a00043.html#acb7f1f51f0f75b15fd29379e87128b27">getAirFrames()</a>.</p>
<div class="fragment"><pre class="fragment">  {
      <a class="code" href="a00043.html#a684323fb3bd48d29674f5b14d7ce2f02" title="Type for a const-iterator over an AirFrame interval matrix.">const_iterator</a> itEnd = <a class="code" href="a00043.html#a37ac84f95c3faeb3e2606a4a01dbf36e" title="The end iterator for the matrix.">cConstItEnd</a>;
      <span class="keywordflow">for</span> (<a class="code" href="a00043.html#a684323fb3bd48d29674f5b14d7ce2f02" title="Type for a const-iterator over an AirFrame interval matrix.">const_iterator</a> it(&amp;airFrames, from, to); it != itEnd; ++it) {
          <span class="keywordflow">if</span> (fctrFilter != NULL) {
              <span class="keywordflow">if</span> (!fctrFilter-&gt;pass(it-&gt;second))
                  <span class="keywordflow">continue</span>;
          }
          outVector.push_back(it-&gt;second);
      }
  }
</pre></div>
</div>
</div>
<a class="anchor" id="a5b1b8d56aa2fa64b5d79c0cf5c3167a9"></a><!-- doxytag: member="ChannelInfo::isRecording" ref="a5b1b8d56aa2fa64b5d79c0cf5c3167a9" args="() const " -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">bool ChannelInfo::isRecording </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const<code> [inline]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Returns true if <a class="el" href="a00043.html" title="This class is used by the BasePhyLayer to keep track of the AirFrames on the channel.">ChannelInfo</a> is currently recording. </p>
<dl class="return"><dt><b>Returns:</b></dt><dd>true if <a class="el" href="a00043.html" title="This class is used by the BasePhyLayer to keep track of the AirFrames on the channel.">ChannelInfo</a> is recording </dd></dl>

<p>References <a class="el" href="a00043.html#a647dc636e9aa2f8a70ac99b604336cb2">recordStartTime</a>.</p>

<p>Referenced by <a class="el" href="a00029.html#a6866e3f79df84cdb5550a51d6502463f">BasePhyLayer::handleChannelSenseRequest()</a>, and <a class="el" href="a00029.html#a76d0386516d18d1cc64af5ef6fb315cd">BasePhyLayer::sendControlMsgToMac()</a>.</p>
<div class="fragment"><pre class="fragment">  {
    <span class="keywordflow">return</span> <a class="code" href="a00043.html#a647dc636e9aa2f8a70ac99b604336cb2" title="Stores a point in history up to which we need to keep all channel information stored (value should be...">recordStartTime</a> &gt;= SIMTIME_ZERO;
  }
</pre></div>
</div>
</div>
<a class="anchor" id="ac033379c710f5d4c66168032a92f0c1e"></a><!-- doxytag: member="ChannelInfo::removeAirFrame" ref="ac033379c710f5d4c66168032a92f0c1e" args="(airframe_ptr_t a, simtime_t_cref returnTimeIfEmpty=invalidSimTime)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">simtime_t ChannelInfo::removeAirFrame </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="a00043.html#aa93cf512eb51209e31b2d4903faca31d">airframe_ptr_t</a>&#160;</td>
          <td class="paramname"><em>a</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">simtime_t_cref&#160;</td>
          <td class="paramname"><em>returnTimeIfEmpty</em> = <code><a class="el" href="a00043.html#a6e51dfe3982d95dace93761852a0ac07">invalidSimTime</a></code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Tells the <a class="el" href="a00043.html" title="This class is used by the BasePhyLayer to keep track of the AirFrames on the channel.">ChannelInfo</a> that an AirFrame is over. </p>
<p>This does not mean that it loses ownership of the AirFrame.</p>
<dl class="return"><dt><b>Returns:</b></dt><dd>The current time-point from on which information concerning AirFrames is needed to be stored. </dd></dl>

<p>References <a class="el" href="a00043.html#a2db96b70bb8678e3e4959985a7ef27a5">activeAirFrames</a>, <a class="el" href="a00043.html#a93b197f70e37825ac3fdc760960144f5">addToInactives()</a>, <a class="el" href="a00043.html#a9c7678b4205557914b26e58edcdf44c2">airFrameStarts</a>, <a class="el" href="a00043.html#a1c021b6db89a2f805004e221dd84b3f1">deleteAirFrame()</a>, <a class="el" href="a00043.html#a93480cb69cb9c0367f30e6ccba84181e">findEarliestInfoPoint()</a>, and <a class="el" href="a00043.html#a5af012c57b6bb9930b1634138ab65bf8">isChannelEmpty()</a>.</p>

<p>Referenced by <a class="el" href="a00029.html#a415f92b23835dc5ffc568747a4669b8f">BasePhyLayer::handleAirFrameEndReceive()</a>.</p>
<div class="fragment"><pre class="fragment">{
  assert(<a class="code" href="a00043.html#a9c7678b4205557914b26e58edcdf44c2" title="Stores the start time of every AirFrame.">airFrameStarts</a>.count(frame-&gt;getTreeId()) &gt; 0);

  <span class="comment">//get start of AirFrame</span>
  simtime_t_cref startTime = <a class="code" href="a00043.html#a9c7678b4205557914b26e58edcdf44c2" title="Stores the start time of every AirFrame.">airFrameStarts</a>[frame-&gt;getTreeId()];

  <span class="comment">//calculate end time</span>
  simtime_t      endTime   = startTime + frame-&gt;getDuration();

  <span class="comment">//remove this AirFrame from active AirFrames</span>
  <a class="code" href="a00043.html#a1c021b6db89a2f805004e221dd84b3f1" title="Deletes an AirFrame from an AirFrameMatrix.">deleteAirFrame</a>(<a class="code" href="a00043.html#a2db96b70bb8678e3e4959985a7ef27a5" title="Stores the currently active AirFrames.">activeAirFrames</a>, frame, startTime, endTime);

  <span class="comment">//add to inactive AirFrames</span>
  <a class="code" href="a00043.html#a93b197f70e37825ac3fdc760960144f5" title="Moves a previously active AirFrame to the inactive AirFrames.">addToInactives</a>(frame, startTime, endTime);


  <span class="comment">// Now check, whether the earliest time-point we need to store information</span>
  <span class="comment">// for might have moved on in time, since an AirFrame has been deleted.</span>
  <span class="keywordflow">if</span>(<a class="code" href="a00043.html#a5af012c57b6bb9930b1634138ab65bf8" title="Returns true if there are currently no active or inactive AirFrames on the channel.">isChannelEmpty</a>()) {
    <span class="keywordflow">return</span> returnTimeIfEmpty;
  }
  <span class="keywordflow">return</span> <a class="code" href="a00043.html#a93480cb69cb9c0367f30e6ccba84181e" title="Returns the start time of the odlest AirFrame on the channel.">findEarliestInfoPoint</a>(returnTimeIfEmpty);
}
</pre></div>
</div>
</div>
<a class="anchor" id="abab4a17344f3b254693ed34309c6466f"></a><!-- doxytag: member="ChannelInfo::startRecording" ref="abab4a17344f3b254693ed34309c6466f" args="(simtime_t_cref start)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void ChannelInfo::startRecording </td>
          <td>(</td>
          <td class="paramtype">simtime_t_cref&#160;</td>
          <td class="paramname"><em>start</em></td><td>)</td>
          <td><code> [inline]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Tells <a class="el" href="a00043.html" title="This class is used by the BasePhyLayer to keep track of the AirFrames on the channel.">ChannelInfo</a> to keep from now on all channel information until the passed time in history. </p>
<p>The passed start-time should be the current simulation time, otherwise <a class="el" href="a00043.html" title="This class is used by the BasePhyLayer to keep track of the AirFrames on the channel.">ChannelInfo</a> can't assure that it hasn't already thrown away some information for that passed time period.</p>
<p>Subsequent calls to this method will update the recording start time and information from old start times is thrown away.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">start</td><td>The point in time from which to keep all channel information stored. </td></tr>
  </table>
  </dd>
</dl>

<p>References <a class="el" href="a00043.html#a1ffb197c5bf86824cd04313da5e9e4ed">checkAndCleanInterval()</a>, and <a class="el" href="a00043.html#a647dc636e9aa2f8a70ac99b604336cb2">recordStartTime</a>.</p>

<p>Referenced by <a class="el" href="a00029.html#a6866e3f79df84cdb5550a51d6502463f">BasePhyLayer::handleChannelSenseRequest()</a>.</p>
<div class="fragment"><pre class="fragment">  {
    <span class="comment">// clean up until old record start</span>
    <span class="keywordflow">if</span>(<a class="code" href="a00043.html#a647dc636e9aa2f8a70ac99b604336cb2" title="Stores a point in history up to which we need to keep all channel information stored (value should be...">recordStartTime</a> &gt;= SIMTIME_ZERO) {
      <a class="code" href="a00043.html#a647dc636e9aa2f8a70ac99b604336cb2" title="Stores a point in history up to which we need to keep all channel information stored (value should be...">recordStartTime</a> = start;
      <a class="code" href="a00043.html#a1ffb197c5bf86824cd04313da5e9e4ed" title="Checks if any information inside the passed interval can be discarded.">checkAndCleanInterval</a>(0, <a class="code" href="a00043.html#a647dc636e9aa2f8a70ac99b604336cb2" title="Stores a point in history up to which we need to keep all channel information stored (value should be...">recordStartTime</a>);
    } <span class="keywordflow">else</span> {
      <a class="code" href="a00043.html#a647dc636e9aa2f8a70ac99b604336cb2" title="Stores a point in history up to which we need to keep all channel information stored (value should be...">recordStartTime</a> = start;
    }
  }
</pre></div>
</div>
</div>
<a class="anchor" id="a884277584d1abf73eaca5df0c61e08c9"></a><!-- doxytag: member="ChannelInfo::stopRecording" ref="a884277584d1abf73eaca5df0c61e08c9" args="()" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void ChannelInfo::stopRecording </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td><code> [inline]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Tells <a class="el" href="a00043.html" title="This class is used by the BasePhyLayer to keep track of the AirFrames on the channel.">ChannelInfo</a> to stop recording Information from now on. </p>
<p>Its up to <a class="el" href="a00043.html" title="This class is used by the BasePhyLayer to keep track of the AirFrames on the channel.">ChannelInfo</a> to decide when to actually throw away the information it doesn't need to store anymore now. </p>

<p>References <a class="el" href="a00043.html#a3a3f57cc0461d0cb7b938feb58dc3947">checkAndCleanFrom()</a>, <a class="el" href="a00043.html#a6e51dfe3982d95dace93761852a0ac07">invalidSimTime</a>, and <a class="el" href="a00043.html#a647dc636e9aa2f8a70ac99b604336cb2">recordStartTime</a>.</p>

<p>Referenced by <a class="el" href="a00029.html#a76d0386516d18d1cc64af5ef6fb315cd">BasePhyLayer::sendControlMsgToMac()</a>.</p>
<div class="fragment"><pre class="fragment">  {
    <span class="keywordflow">if</span>(<a class="code" href="a00043.html#a647dc636e9aa2f8a70ac99b604336cb2" title="Stores a point in history up to which we need to keep all channel information stored (value should be...">recordStartTime</a> &gt;= SIMTIME_ZERO) {
      simtime_t old = <a class="code" href="a00043.html#a647dc636e9aa2f8a70ac99b604336cb2" title="Stores a point in history up to which we need to keep all channel information stored (value should be...">recordStartTime</a>;
      <a class="code" href="a00043.html#a647dc636e9aa2f8a70ac99b604336cb2" title="Stores a point in history up to which we need to keep all channel information stored (value should be...">recordStartTime</a> = <a class="code" href="a00043.html#a6e51dfe3982d95dace93761852a0ac07" title="Invalid simulation time point, will be used for return value of emptiness.">invalidSimTime</a>;
      <a class="code" href="a00043.html#a3a3f57cc0461d0cb7b938feb58dc3947" title="Checks if any information up from the passed start time can be discarded.">checkAndCleanFrom</a>(old);
    }
  }
</pre></div>
</div>
</div>
<hr/><h2>Member Data Documentation</h2>
<a class="anchor" id="a2db96b70bb8678e3e4959985a7ef27a5"></a><!-- doxytag: member="ChannelInfo::activeAirFrames" ref="a2db96b70bb8678e3e4959985a7ef27a5" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="a00043.html#aba8c8f81b5fad9216a08d86de4acb070">AirFrameMatrix</a> <a class="el" href="a00043.html#a2db96b70bb8678e3e4959985a7ef27a5">ChannelInfo::activeAirFrames</a><code> [protected]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Stores the currently active AirFrames. </p>
<p>This means every AirFrame which was added but not yet removed. </p>

<p>Referenced by <a class="el" href="a00043.html#a6d92d233abde2703171773354c8689cd">addAirFrame()</a>, <a class="el" href="a00043.html#a4ec93f0a935723a0183de82969ff0d6e">assertNoIntersections()</a>, <a class="el" href="a00043.html#ab4da0befdce7f2b27ae4a61d66ec2167">canDiscardInterval()</a>, <a class="el" href="a00043.html#a93480cb69cb9c0367f30e6ccba84181e">findEarliestInfoPoint()</a>, <a class="el" href="a00043.html#acb7f1f51f0f75b15fd29379e87128b27">getAirFrames()</a>, and <a class="el" href="a00043.html#ac033379c710f5d4c66168032a92f0c1e">removeAirFrame()</a>.</p>

</div>
</div>
<a class="anchor" id="ac674b4797484960e332e260af4825c04"></a><!-- doxytag: member="ChannelInfo::inactiveAirFrames" ref="ac674b4797484960e332e260af4825c04" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="a00043.html#aba8c8f81b5fad9216a08d86de4acb070">AirFrameMatrix</a> <a class="el" href="a00043.html#ac674b4797484960e332e260af4825c04">ChannelInfo::inactiveAirFrames</a><code> [protected]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Stores inactive AirFrames. </p>
<p>This means every AirFrame which has been already removed but still is needed because it intersect with one or more active AirFrames. </p>

<p>Referenced by <a class="el" href="a00043.html#a93b197f70e37825ac3fdc760960144f5">addToInactives()</a>, <a class="el" href="a00043.html#a4ec93f0a935723a0183de82969ff0d6e">assertNoIntersections()</a>, <a class="el" href="a00043.html#a3a3f57cc0461d0cb7b938feb58dc3947">checkAndCleanFrom()</a>, <a class="el" href="a00043.html#a1ffb197c5bf86824cd04313da5e9e4ed">checkAndCleanInterval()</a>, <a class="el" href="a00043.html#a93480cb69cb9c0367f30e6ccba84181e">findEarliestInfoPoint()</a>, and <a class="el" href="a00043.html#acb7f1f51f0f75b15fd29379e87128b27">getAirFrames()</a>.</p>

</div>
</div>
<hr/>The documentation for this class was generated from the following files:<ul>
<li>D:/Projects/MiXiM/extsrc/mixim/src/base/phyLayer/<a class="el" href="a00287_source.html">ChannelInfo.h</a></li>
<li>D:/Projects/MiXiM/extsrc/mixim/src/base/phyLayer/ChannelInfo.cc</li>
</ul>
</div>
</div>
  <div id="nav-path" class="navpath">
    <ul>
      <li class="navelem"><a class="el" href="a00043.html">ChannelInfo</a>      </li>

    <li class="footer">Generated on Tue Mar 5 2013 21:26:31 for MiXiM by
    <a href="http://www.doxygen.org/index.html">
    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.5.1 </li>
   </ul>
 </div>


</body>
</html>
